<?php

/**
 * Relaiza uma analise e uma formatação nos dados do arquivo de retorno.
 * @return array uma array de dados de boletos. Cada item do array é um boleto, 
 * e esse boleto contém seus dados de retorno.
 */
function parser_ret($ret_file) {
    
    $lendo = @fopen($ret_file, 'r');
    
    if(!$lendo) return null;
    
    $boletos = array();
    
    while (!feof($lendo)){

        $linha = fgets($lendo,9999);
        $dados["t_u_segmento"] = substr($linha,13,1);//Segmento T ou U
        $dados["t_tipo_reg"] = substr($linha,7,1);//Tipo de Registro

        if($dados["t_u_segmento"] == 'T'){
            $dados["t_cod_banco"] = substr($linha,0,3);//Código do banco na compensação
            $dados["t_lote"] = substr($linha,3,4);//Lote de serviço - Número seqüencial para identificar um lote de serviço.
            $dados["t_n_sequencial"] = substr($linha,8,5);//Nº Sequencial do registro no lote
            $dados["t_cod_seg"] = substr($linha,15,2);//Cód. Segmento do registro detalhe
            $dados["t_cod_conv_banco"] = substr($linha,23,6);//Código do convênio no banco - Código fornecido pela CAIXA, através da agência de relacionamento do cliente. Deve ser preenchido com o código do Cedente (6 posições).
            $dados["t_n_banco_sac"] = substr($linha,32,3);//Numero do banco de sacados
            $dados["t_mod_nosso_n"] = substr($linha,39,2);//Modalidade nosso número
            $dados["t_id_titulo_banco"] = substr($linha,41,15);//Identificação do titulo no banco - Número adotado pelo Banco Cedente para identificar o Título.
            $dados["t_cod_carteira"] = substr($linha,57,1);//Código da carteira - Código adotado pela FEBRABAN, para identificar a característica dos títulos. 1=Cobrança Simples, 3=Cobrança Caucionada, 4=Cobrança Descontada
            $dados["t_num_doc_cob"] = substr($linha,58,11);//Número do documento de cobrança - Número utilizado e controlado pelo Cliente, para identificar o título de cobrança.
            $dados["t_dt_vencimento"] = mask_data(substr($linha,73,8));//Data de vencimento do titulo - Data de vencimento do título de cobrança.
            $dados["t_v_nominal"] = substr($linha,81,13);//Valor nominal do titulo - Valor original do Título. Quando o valor for expresso em moeda corrente, utilizar 2 casas decimais.
            $dados["t_cod_banco2"] = substr($linha,96,3);//Código do banco
            $dados["t_cod_ag_receb"] = substr($linha,99,5);//Codigo da agencia cobr/receb - Código adotado pelo Banco responsável pela cobrança, para identificar o estabelecimento bancário responsável pela cobrança do título.
            $dados["t_dv_ag_receb"] = substr($linha,104,1);//Dígito verificador da agencia cobr/receb
            $dados["t_id_titulo_empresa"] = substr($linha,105,25);//identificação do título na empresa - Campo destinado para uso da Empresa Cedente para identificação do Título. Informar o Número do Documento - Seu Número.
            $dados["t_cod_moeda"] = substr($linha,130,2);//Código da moeda
            $dados["t_tip_inscricao"] = substr($linha,132,1);//Tipo de inscrição - Código que identifica o tipo de inscrição da Empresa ou Pessoa Física perante uma Instituição governamental: 0=Não informado, 1=CPF, 2=CGC / CNPJ, 9=Outros.
            $dados["t_num_inscricao"] = substr($linha,133,15);//Número de inscrição - Número de inscrição da Empresa (CNPJ) ou Pessoa Física (CPF).
            $dados["t_nome"] = substr($linha,148,40);//Nome - Nome que identifica a entidade, pessoa física ou jurídica, Cedente original do título de cobrança.
            $dados["t_v_tarifa_custas"] = substr($linha,198,13);//Valor da tarifa/custas
            $dados["t_id_rejeicoes"] = substr($linha,213,10);//Identificação para rejeições, tarifas, custas, liquidação e baixas
        }
        if($dados["t_u_segmento"] == 'U'){

            $dados["u_cod_banco"] = substr($linha,0,3);//Código do banco na compensação
            $dados["u_lote"] = substr($linha,3,4);//Lote de serviço - Número seqüencial para identificar um lote de serviço.
            $dados["u_tipo_reg"] = substr($linha,7,1);//Tipo de Registro - Código adotado pela FEBRABAN para identificar o tipo de registro: 0=Header de Arquivo, 1=Header de Lote, 3=Detalhe, 5=Trailer de Lote, 9=Trailer de Arquivo.
            $dados["u_n_sequencial"] = substr($linha,8,5);//Nº Sequencial do registro no lote
            $dados["u_cod_seg"] = substr($linha,15,2);//Cód. Segmento do registro detalhe
            $dados["u_juros_multa"] = substr($linha,17,15);//Jurus / Multa / Encargos - Valor dos acréscimos efetuados no título de cobrança, expresso em moeda corrente.
            $dados["u_desconto"] = substr($linha,32,15);//Valor do desconto concedido - Valor dos descontos efetuados no título de cobrança, expresso em moeda corrente.
            $dados["u_abatimento"] = substr($linha,47,15);//Valor do abat. concedido/cancel. - Valor dos abatimentos efetuados ou cancelados no título de cobrança, expresso em moeda corrente.
            $dados["u_iof"] = substr($linha,62,15);//Valor do IOF recolhido - Valor do IOF - Imposto sobre Operações Financeiras - recolhido sobre o Título, expresso em moeda corrente.
            $dados["u_v_pago"] = substr($linha,77,15);//Valor pago pelo sacado - Valor do pagamento efetuado pelo Sacado referente ao título de cobrança, expresso em moeda corrente.
            $dados["u_v_liquido"] = substr($linha,92,15);//Valor liquido a ser creditado - Valor efetivo a ser creditado referente ao Título, expresso em moeda corrente.
            $dados["u_v_despesas"] = substr($linha,107,15);//Valor de outras despesas - Valor de despesas referente a Custas Cartorárias, se houver.
            $dados["u_v_creditos"] = substr($linha,122,15);//Valor de outros creditos - Valor efetivo de créditos referente ao título de cobrança, expresso em moeda corrente.
            $dados["u_dt_ocorencia"] = substr(substr($linha,137,8),4,4).'-'.substr(substr($linha,137,8),2,2).'-'.substr(substr($linha,137,8),0,2);//Data da ocorrência - Data do evento que afeta o estado do título de cobrança.
            $dados["u_dt_efetivacao"] = mask_data(substr($linha,145,8));//Data da efetivação do credito - Data de efetivação do crédito referente ao pagamento do título de cobrança.
            $dados["u_dt_debito"] = mask_data(substr($linha,157,8));//Data do débito da tarifa
            $dados["u_cod_sacado"] = substr($linha,167,15);//Código do sacado no banco
            $dados["u_cod_banco_comp"] = substr($linha,210,3);//Cód. Banco Correspondente compens - Código fornecido pelo Banco Central para identificação na Câmara de Compensação, do Banco ao qual será repassada a Cobrança do Título.
            $dados["u_nn_banco"] = substr($linha,213,20);//Nosso Nº banco correspondente - Código fornecido pelo Banco Correspondente para identificação do Título de Cobrança. Deixar branco (Somente para troca de arquivos entre Bancos).

            $dados["u_juros_multa"] = substr($dados["u_juros_multa"],0,13).'.'.substr($dados["u_juros_multa"],13,2);
            $dados["u_desconto"] = substr($dados["u_desconto"],0,13).'.'.substr($dados["u_desconto"],13,2);
            $dados["u_abatimento"] = substr($dados["u_abatimento"],0,13).'.'.substr($dados["u_abatimento"],13,2);
            $dados["u_iof"] = substr($dados["u_iof"],0,13).'.'.substr($dados["u_iof"],13,2);
            $dados["u_v_pago"] = substr($dados["u_v_pago"],0,13).'.'.substr($dados["u_v_pago"],13,2);
            $dados["u_v_liquido"] = substr($dados["u_v_liquido"],0,13).'.'.substr($dados["u_v_liquido"],13,2);
            $dados["u_v_despesas"] = substr($dados["u_v_despesas"],0,13).'.'.substr($dados["u_v_despesas"],13,2);
            $dados["u_v_creditos"] = substr($dados["u_v_creditos"],0,13).'.'.substr($dados["u_v_creditos"],13,2);
            
            $boletos[] = $dados;
            
            $dados = array();
        }
    }

    fclose($lendo);
    
    return $boletos;

}

function mask_data($str_date){
    return substr($str_date, -4) . '-' . substr($str_date, 2, 2) . '-' . substr($str_date, 0, 2);
}

?>